import copy

from manager.config import Base_File_Config as fileConfig
from manager.tool import Read_Properties as read

"""
替换变量中的数据
e.g.   id:{{key}} --> id:12
"""

file_path = fileConfig.ENVIRONMENT_PROPERTIES_PATH


def __replace_str_and_list(data, p):
    """
    识别并替换数组和字符串
    :param data: 需替换的数据
    :param p:    操作properties对象
    :return:     替换后数据
    """
    copy_data = copy.deepcopy(data)
    if isinstance(copy_data, str):
        data = __replace(copy_data, p)
    else:
        if isinstance(copy_data, list):
            for i in range(0, len(copy_data)):
                if isinstance(copy_data[i], list):
                    data[i] = replaceVarData(copy_data[i])
                else:
                    data[i] = __replace(copy_data[i], p)
    return data


def __replace(txt, p):
    """
    识别并替换数组和字符串
    :param txt:  需替换的文本
    :param p:    操作properties对象
    :return:     替换后数据
    """
    data = copy.deepcopy(txt)
    while data.find("{{") >= 0:
        # 取出变量名称
        varBeginIndex = data.find("{{") + 2
        varOverIndex = data.find("}}")
        # 取出后循环删除
        delBeginIndex = data.find("{{")
        delOverIndex = data.find("}}") + 2
        var = data[varBeginIndex: varOverIndex]
        delVar = data[delBeginIndex: delOverIndex]
        data = data.replace(delVar, '')
        txt = txt.replace(delVar, p.get(var))
    return txt


def replaceVarData(data):
    """
    根据指定文件 替换 {{data}} 定义的数据
    :param data:   需替换的数据
    :return:       替换后数据
    """
    p = read.Properties(file_path, 'utf-8')
    return __replace_str_and_list(data, p)


def replaceListVarData(listData):
    """
    根据指定文件 替换 {{data}} 定义的数据
    :param listData:   需替换的集合
    :return:           替换后集合
    """
    p = read.Properties(file_path, 'utf-8')
    varList = []
    for data in listData:
        varList.append(__replace_str_and_list(data, p))
    return varList


def replaceVarDataToFile(data, filePath):
    """
    根据指定文件 替换 {{data}} 定义的数据
    :param data:        需替换的数据
    :param filePath:    properties文件路径
    :return:            替换后数据
    """
    p = read.Properties(filePath, 'utf-8')
    return __replace_str_and_list(data, p)
